package com.istock.union.user.service;

import java.util.List;
import java.util.Map;

import com.istock.union.user.model.MenuInfo;
import com.istock.union.user.model.RoleInfo;
import com.istock.union.user.model.ext.ExtMenuInfo;
import com.istock.union.user.model.ext.MenuInfoVO;

public interface MenuInfoService {

	/**使用当前的用户id,获得所有的用户菜单
	 * @param userId
	 * @return
	 */
	public List<MenuInfo> findMenuInfoByCredentialId(String credentialId);
	
	/**加载index,获得所有目录和菜单
	 * @return
	 */
	public List<MenuInfo> findAllMenu();
	
	/**菜单编辑,获得所有的资源
	 * @return
	 */
	public List<MenuInfo> findAllResource();
	
	/**用户权限标识获取
	 * @param userId
	 * @return
	 */
	public List<String> findPermByCredentialId(String credentialId);
	
	/**超级管理员获得所有的授权标识
	 * @return
	 */
	public List<String> findAllPerm();
	
	/**得到一个菜单的第一层子项
	 * @param parentId
	 * @return
	 */
	public List<MenuInfo> findButtonByParent(String parentId);
	
	/**获得某一个菜单项的详细信息
	 * @param id
	 * @return
	 */
	public MenuInfoVO findMenuInfoById(String id);
	
	/**将菜单信息转化为ztree的信息
	 * @param includeRoot 是否包含根
	 * @return
	 */
	public List<Map<String, Object>> menuTreeData(boolean includeRoot);
	
	/**将菜单信息转化为ztree
	 * @param includeRoot 是否包含根
	 * @param checkedMenu 被选中的菜单列表
	 * @return
	 */
	public List<Map<String, Object>> menuTreeSelect(boolean includeRoot,List<String> checkedMenu);
	
	/**
	 * 得到某一个角色的菜单信息
	 * @param roleInfo
	 * @param includeButton 是否包含按钮权限
	 * @return
	 */
	public List<Map<String, Object>> roleMenuTreeData(RoleInfo roleInfo , boolean includeButton);
	
	/**
     * 对象转菜单树
     * 将菜单对象转换为ztree
     * 
     * @param menuList 菜单列表
     * @param isCheck 是否需要选中
     * @param roleMenuList 角色已存在菜单列表
     * @param permsFlag 是否需要显示权限标识
     * @return
     */
    public List<Map<String, Object>> getTrees(List<MenuInfo> menuList, boolean isCheck, List<String> roleMenuList,
            boolean permsFlag);

    /**在某一个parentid的菜单树上,对于menuName的唯一性检查
     * @param id
     * @param parentId
     * @param menuName
     * @return
     */
    public Long findMenuCount(String id , String parentId , String menuName);
    
    /**保存菜单信息
     * @param menuInfo
     */
    public void saveMenuInfo(MenuInfo menuInfo);
    
    /**
	 * 根据父菜单ID查看子菜单数量
	 * 
	 * @param id
	 * @return
	 */
	public long countMenusByParentId(String id);

	/**
	 * 根据菜单ID查看菜单被分配角色数量
	 * 
	 * @param menuId
	 * @return
	 */
	public long countRolesByMenuId(String menuId);

	/**
	 * 根据ID删除菜单
	 * 
	 * @param id
	 * @return
	 */
	public int deleteMenuById(String id);
	
	
	public List<ExtMenuInfo> allMenuTreeNew() ;
	public List<String> roleMenuTreeNew(String roleId);
}
